#pragma once
#include "Utility.h"

struct Transform {
	glm::mat4 Projection;
	glm::mat4 View;
	glm::mat4 Model;
	glm::mat4 MVP;
	glm::mat4 Perspective;
	glm::mat3 ModelView3x3Matrix;
} ;


struct Frustrum {
	glm::vec3 ftl, ftr, fbl, fbr, ntl, ntr, nbl, nbr;

};

class Camera
{

private:
	float angleToRot;
	float mInitialFoV;
	float mSpeed; 
	float mMouseSpeed;
	bool locked;
	float mHorizontalAngle, mVerticalAngle;
	
	glm::vec3 right, up;
public:
	Frustrum frustrum;
	glm::vec3 mPosition;
	glm::vec3 direction;
	
	Camera(glm::vec3 posN);
	~Camera(void);

	void update();
	void updateFrustrum();
	Transform mTransform;

	glm::vec3 castRay();
};

